#change 1 random gen of a random super gen from the elected chromosome
class MutationOperator
	attr_accessor :percentage
	attr_accessor :ratio
	
	def initialize(perc,ratio)
		@percentage = perc
		@ratio = ratio
	end

	def operate(population)
#		mutated_chromosomes= []
		unless Random.rand(1.0) > ratio
			(population.size*@percentage).round.times{
#cambio todos los genes para no tener que diferenciar entre composite o simple...
#				population.sample.gens.each{|gen| gen.set_allele}
#cambio un solo gen del chromosoma si es un composite cambio de un solo supergen un gen.
				population.sample.gens.sample.set_allele
				p "engrampe a uno :D!"
#cambio un numero random en un cromosoma con super genes cambio un gen 
#de un numero random de super genes(puede dar 2 veces el mismo)
#en un cromosoma simple cambio un n° random de genes simples (puede caer en el mismo 2 veces)
#				victim = population.sample
#				muts = Random.rand(victim.gens_amount-1) + 1
#				muts.times{victim.gens.sample.set_allele}
#				chromosome = population.sample
#				clone_chromosome = chromosome.clone
#changes 1 gen from each super gen or every gens from a chromosome formed by simple gens
#				clone_chromosome.gens.each{|gen| gen.set_allele}
#				mutated_chromosomes << chromosome
			}
		end
#ya tiene efecto de lado no tiene sentido devolverlo
	#return mutated_chromosomes
	#debe devolver la poblacion con los cromosomas mutados o no para poder seguir
	#el flujo general del algoritmo en poblacion
	return population
	end

end
